package br.com.damazzy.manterProduto {
	
	import br.com.damazzy.util.TratamentoErros;
	import br.com.damazzy.vo.ProdutoVO;
	
	import flash.events.Event;
	import flash.events.MouseEvent;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.events.CloseEvent;
	import mx.events.FlexEvent;
	import mx.managers.PopUpManager;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	
	public class ProdutoEdicao extends ProdutoEdicaoView {
		
		private var _vo: ProdutoVO;
		private var _telaPai: ProdutoSelecao;
		private var listaTiposProduto: ArrayCollection;
		private var listaTamanhos: ArrayCollection;
		private var _visualizarDados: Boolean = false;
		
		public function ProdutoEdicao(vo: ProdutoVO) {
			super();
			
			_vo = vo;
			
			this.addEventListener(FlexEvent.CREATION_COMPLETE, init);
		}
		
		private function init(event: FlexEvent): void {
		
			btnSalvar.addEventListener(MouseEvent.CLICK, salvar);
			btnFechar.addEventListener(MouseEvent.CLICK, fechar);
			
			this.addEventListener(CloseEvent.CLOSE, fechar);
			
			rm.obterDefinicoes.addEventListener(ResultEvent.RESULT, resultObterDefinicoes);
			rm.obterDefinicoes.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.incluir.addEventListener(ResultEvent.RESULT, resultIncluir);
			rm.incluir.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			rm.alterar.addEventListener(ResultEvent.RESULT, resultAlterar);
			rm.alterar.addEventListener(FaultEvent.FAULT, TratamentoErros.fault);
			
			limparDados();
			
			rm.obterDefinicoes();
		}
		
		private function resultObterDefinicoes(result: ResultEvent): void {
			listaTiposProduto = result.result.dados.listaTiposProduto;
			listaTamanhos = result.result.dados.listaTamanhos;
		
			criarItemComboTipoProduto();
			criarItemComboTamanho();
			
			if (_vo != null) {
				this.alterar();
			} else {
				this.incluir();
			}
			
			visualizacaoDados();
		}
		
		private function criarItemComboTipoProduto(): void {
			var objTipoProduto: ProdutoVO = new ProdutoVO();
			objTipoProduto.descTipoProduto = "---";
			
			listaTiposProduto.addItemAt(objTipoProduto, 0);
			
			cbxTipoProduto.dataProvider = listaTiposProduto;
		}
		
		private function criarItemComboTamanho(): void {
			var objTamanho: ProdutoVO = new ProdutoVO();
			objTamanho.codTamanho = "---";
			
			listaTamanhos.addItemAt(objTamanho, 0);
			
			cbxTamanho.dataProvider = listaTamanhos;
		}

		private function fechar(event: Event = null): void {
			PopUpManager.removePopUp(this);
			_telaPai.pesquisar();
		}
		
		private function limparDados(): void {
			txtCodigo.text = "";
			txtNome.text = "";
			txtDescricao.text = "";
			txtValor.text = "";
			cbxTipoProduto.selectedIndex = 0;
			cbxTamanho.selectedIndex = 0;
			txtQtdEstoque.text = "";
		}
		
		private function validarDados(): Boolean {
			
			var msg: String = "O campo ";
			var validacaoOk: Boolean = true;
			
			if (txtCodigo.text == "") {
				msg += "Código";
				validacaoOk = false;
				
			} else if (txtNome.text == "") {
				msg += "Nome";
				validacaoOk = false;
				
			} else if (txtValor.text == "") {
				msg += "Valor";
				validacaoOk = false;
				
			} else if (cbxTipoProduto.selectedIndex == 0) {
				msg += "Tipo de Produto";
				validacaoOk = false;
				
			} else if (txtQtdEstoque.text == "") {
				msg += "Quantidade em Estoque";
				validacaoOk = false;
			}
			
			msg += " é de preenchimento obrigatório.";
			
			if (!validacaoOk) {
				Alert.show(msg, "Erro!");
			}
			
			return validacaoOk;
		}
		
		private function salvar(event: MouseEvent): void {
			
			if (validarDados()) {
				
				var novaVO: ProdutoVO = new ProdutoVO();
				novaVO.codigo = txtCodigo.actualText;
				novaVO.nome = txtNome.actualText;
				novaVO.descricao = txtDescricao.text;
				novaVO.valor = txtValor.actualText;
				novaVO.idTipoProduto = cbxTipoProduto.selectedItem.idTipoProduto;
				novaVO.idTamanho = cbxTamanho.selectedIndex == 0 ? null : cbxTamanho.selectedItem.idTamanho;
				novaVO.quantidadeEstoque = txtQtdEstoque.text;
				
				if (_vo != null && _vo.idProduto != null && _vo.idProduto != "") {
					novaVO.idProduto = _vo.idProduto;
					rm.alterar(novaVO);
				} else {
					rm.incluir(novaVO);
				}
			}
		}
		
		private function resultIncluir(result: ResultEvent): void {
			Alert.show("Produto incluído com sucesso.", "Aviso!");
			limparDados();
		}
		
		private function resultAlterar(result: ResultEvent): void {
			Alert.show("Produto alterado com sucesso.", "Aviso!");
			fechar();
		}
		
		private function incluir(): void {
			limparDados();
		}
		
		private function alterar(): void {
			txtCodigo.actualText = _vo.codigo;
			txtNome.actualText = _vo.nome;
			txtDescricao.text = _vo.descricao;
			txtValor.actualText = _vo.valor;
			txtQtdEstoque.text = _vo.quantidadeEstoque;
			
			selecionarOpcaoComboTipoProduto();
			selecionarOpcaoComboTamanho();
		}
		
		private function visualizacaoDados(): void {
			
			if (_visualizarDados) {
				txtCodigo.editable = false;
				txtNome.editable = false;
				txtDescricao.editable = false;
				txtValor.editable = false;
				txtQtdEstoque.editable = false;
				
				cbxTipoProduto.enabled = false;
				cbxTamanho.enabled = false;
				
				btnSalvar.visible = false;
			}
		}
		
		public function set telaPai(telaPai: ProdutoSelecao): void {
			_telaPai = telaPai;
		}
		
		public function set visualizarDados(valor: Boolean): void {
			_visualizarDados = valor;
		}
		
		private function selecionarOpcaoComboTipoProduto(): void {
			
			for each (var obj: ProdutoVO in cbxTipoProduto.dataProvider) {
				if (obj.idTipoProduto == _vo.idTipoProduto) {
					cbxTipoProduto.selectedItem = obj;
				}
			}
		}
		
		private function selecionarOpcaoComboTamanho(): void {
			
			cbxTamanho.selectedIndex = 0;
			
			for each (var obj: ProdutoVO in cbxTamanho.dataProvider) {
				if (obj.idTamanho == _vo.idTamanho) {
					cbxTamanho.selectedItem = obj;
				}
			}
		}
	}
}